# 第一个GUI
# coding:utf-8

# sys模块提供了访问由解释器使用或维护的变量和与解释器进行交互的函数；
# QtWidgets模块包含提供一组UI元素以创建经典桌面式用户界面的方法，可以让我们很方便地创建窗口对象。
# 最基础的widget组件位于PyQt5.QtWidget模块中
import sys
from PyQt5.QtWidgets import *

# app = QApplication(sys.argv)  # 在PyQt5中，每个应用程序都必须实例化一个QApplication()
# win = QWidget()               # QWidget()对象，它是pyqt5中所有的图形用户界面的基类
# win.show()                    # 使用QWidget对象的show()方法将创建的窗口显示出来
#
# sys.exit(app.exec_())         # 调用应用程序对象的exec_()方法来运行程序的主循环，并使用sys.exit()方法确保程序能够完美的退出。


# 所有的PyQt5应用必须创建一个应用（Application）对象。sys.argv参数是一个来自命令行的参数列表。Python脚本可以在shell中运行。这是我们用来控制我们应用启动的一种方法。
app = QApplication(sys.argv)  ### 在PyQt5中，每个应用程序都必须实例化一个QApplication()

# Qwidget组件是PyQt5中所有用户界面类的基础类。我们给QWidget提供了默认的构造方法。默认构造方法没有父类。没有父类的widget组件将被作为窗口使用。
win = QWidget()               ### QWidget()对象，它是pyqt5中所有的图形用户界面的基类

win.resize(450, 150)          ### 使用QWidget()对象的resize()方法设置窗口的大小为450*150；
win.move(200, 300)            ### 使用QWidget()对象的move()方法，将窗口移动到显示器上x=0，y=300的位置；
win.setWindowTitle('第一个Python GUI')  # 使用QWidget()对象的setWindowTitle()方法，为我们的窗口设置了一个标题。

# show()方法在屏幕上显示出widget。一个widget对象在这里第一次被在内存中创建，并且之后在屏幕上显示。
win.show()                    ### 使用QWidget对象的show()方法将创建的窗口显示出来

# 最后，应用进入主循环。在这个地方，事件处理开始执行。主循环用于接收来自窗口触发的事件，并且转发他们到widget应用上处理。
# 如果我们调用exit()方法或主widget组件被销毁，主循环将退出。sys.exit()方法确保一个不留垃圾的退出。系统环境将会被通知应用是怎样被结束的。
# exec_()方法有一个下划线。因为exec是Python保留关键字。因此，用exec_()来代替。
sys.exit(app.exec_())         ### 调用应用程序对象的exec_()方法来运行程序的主循环，并使用sys.exit()方法确保程序能够完美的退出。
